#============================================
# #知识点
# property在类中装饰：就是把一个功能装饰成一个数据
# class People():
#     def __init__(self,name,age,height,weight) -> None:
#         self.name = name
#         self.age = age
#         self.height = height
#         self.weight = weight
#     @property  #直接将返回值当成一个数值
#     def bmi(self):
#         return self.weight/(self.height**2)  #bmi公式

# FBH = People("冯彬恢",21,175,120)
# BMI = FBH.bmi
# print(BMI)
#============================================
#进阶用法
# 使用property有效地保证了属性访问的一致性。另外property还提供设置和删除属性的功能，如下
class Age():
    def __init__(self,age,name) -> None:
        self.__age = age 
        self.__name = name 

    @property
    def name(self):
        return self.__name
    @name.setter  #设置功能
    def name(self,vlu):
        if type(vlu) is not str:
            print("类型错误")
            return
        self.__name = vlu
        
    @property
    def age(self):
        return self.__age     
    @age.setter
    def age(self,val):
        if type(val) is not int:
            print("类型错误")
            return
        self.__age = val
           
    @age.deleter   #删除功能s
    def age(self):
        print("禁止删除")
obj = Age(18,"小红")
# print(obj.name)  #取值
# obj.name = 28    #对应赋值
# print(obj.name)
# del obj.name    #对应删除
print(obj.name)
obj.name = "小黑"
print(obj.name)

#第一步，将需要被装饰得一组数据改成同种名字
#第二步，在取值得上面加上@property
#第三步，在赋值操作加上@名字.setter
#第四步,在删除操作上加上@名字.deleter
#==========================================
